package pms.controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import pms.dao.PersonHatNotenDao;
import pms.om.Noten;
import pms.om.PersonHatNoten;
import pms.om.Stimme;

/** 
 * Controller to generate the Home Page basics to be rendered by a view. 
 * It extends the convenience class AbstractController that encapsulates most 
 * of the drudgery involved in handling HTTP requests. 
/**
 * @author roman.zaglauer@googlemail.com
 *
 */
public class EditPersonHatNoten extends AbstractController{
	private PersonHatNotenDao personHatNotenDao;
	
	

	/** Getter
	 * @return the personHatNotenDao
	 */
	public PersonHatNotenDao getPersonHatNotenDao() {
		return personHatNotenDao;
	}



	/** Setter
	 * @param personHatNotenDao the personHatNotenDao to set
	 */
	public void setPersonHatNotenDao(PersonHatNotenDao personHatNotenDao) {
		this.personHatNotenDao = personHatNotenDao;
	}



	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest,
			HttpServletResponse httpServletResponse) throws Exception {
		ModelAndView mv = new ModelAndView();
		try {
			int id = Integer.parseInt(httpServletRequest.getParameter("id"));
			// wenn id nicht geparsed werden kann, dann wird ein neues Objekt angelegt
			mv.addObject("title", "PersonHatNotenbeschreibung bearbeiten");
			mv.addObject("message", "Ändern Sie PersonHatNoten und klicken Sie dann auf 'Änderungen übernehmen'.");
		//	mv.addObject("stimme", personHatNotenDao.findById(id));
			
			
		} catch (NumberFormatException e) {
			
			try {
				
				int notenid = Integer.parseInt(httpServletRequest.getParameter("notenid"));
				
				Noten aktnoten = personHatNotenDao.getNotenDao().findById(notenid);
				
				List<Noten> notenliste = personHatNotenDao.getNotenDao().findAll();
				List<Noten> notenlistesort = new ArrayList<Noten>();
				notenlistesort.add(aktnoten);
				
				for (Noten noten : notenliste) {
					if (noten.getId() != aktnoten.getId()) {
						notenlistesort.add(noten);
					}
				}
				
				List<PersonHatNoten> ausgeliehen = personHatNotenDao.findAll();
				List<Noten> nichtAusgeliehen = new ArrayList<Noten>();
				
				boolean flag = false;
				for (Noten noten : notenlistesort) {
					for (PersonHatNoten personHatNoten : ausgeliehen) {
						if (personHatNoten.getNoten().getId() == noten.getId()) {
							flag = true;
							continue;
						}
					}
					if (flag == false) {
						nichtAusgeliehen.add(noten);
					} else {
						flag = false;
					}
				}
				
				
				
				mv.addObject("notenlist", nichtAusgeliehen);
				
			} catch (NumberFormatException e2) {
				
				List<Noten> alleNoten = personHatNotenDao.getNotenDao().findAll();
				List<PersonHatNoten> ausgeliehen = personHatNotenDao.findAll();
				
				List<Noten> nichtAusgeliehen = new ArrayList<Noten>();
				
				boolean flag = false;
				
				for (Noten noten : alleNoten) {
					for (PersonHatNoten personHatNoten : ausgeliehen) {
						if (personHatNoten.getNoten().getId() == noten.getId()) {
							flag = true;
							continue;
						}
					}
					if (flag == false) {
						nichtAusgeliehen.add(noten);
					} else {
						flag = false;
					}
				}
				
				mv.addObject("notenlist", nichtAusgeliehen);
			}
			
			mv.addObject("title", "Noten ausleihen");
			mv.addObject("message", "Geben Sie die Person und die Noten an die Sie ausleihen wollen und klicken Sie dann auf 'Änderungen übernehmen'.");
			
			mv.addObject("personen", personHatNotenDao.getPersonDao().findAll());
			
			mv.addObject("personhatnoten", new PersonHatNoten(null, null, null, null));
		}
		mv.setViewName("edit-personhatnoten");
		return mv;
	}

}
